#include <list>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

void printVec(vector<string>&);

int main()
{
    list<string> names;
    vector<const char*> oldstyle;
    // names = oldstyle; // 错误：容器类型不匹配
    // 正确：可以将 const char* 转换为 string
    names.assign(oldstyle.cbegin(), oldstyle.cend());

    // 等价于 slist1.clear();
    // 后跟 slist1.insert(slist1.begin(), 10, "Hiya!");
    list<string> slist1(1);     // 1 个元素，为空 string
    slist1.assign(10, "Hiya!"); // 10 个元素，每个都是 "Hiya!"

    vector<string> svec1(10, "a");   // 10 个元素的 vector
    vector<string> svec2(24, "b");   // 24 个元素的 vector
    // 交换两个容器的内容（数据结构）
    // 交换后容器的迭代器、引用和指针都不会失效（string 除外）
    // 交换两个 array 所需的时间与 array 中元素的数目成正比
    swap(svec1, svec2);              
    printVec(svec1);
    printVec(svec2);
}

void printVec(vector<string>& vec)
{
    for (auto it = vec.begin(); it != vec.end(); ++it)
        cout << *it << " ";
    cout << endl;
}